﻿using System;
using System.Windows.Forms;
using CentroVentas.Clases.Utiles;

namespace CentroVentas.Funciones.Productos
{
    public partial class FunProductosCrear : Form
    {

        // Propiedades
        private bool _compra;
        private int _id;
        private int _iva;

        private int _idPrecio;

        public int IdPrecio
        {
            get { return _idPrecio; }
            set { _idPrecio = value; }
        }

        public int Iva
        {
            get { return _iva; }
            set { _iva = value; }
        }
        private int _utilidad;

        public int Utilidad
        {
            get { return _utilidad; }
            set { _utilidad = value; }
        }
        private int _cantidad;

        public int Cantidad
        {
            get { return _cantidad; }
            set { _cantidad = value; }
        }
        private int _minimo;

        public int Minimo
        {
            get { return _minimo; }
            set { _minimo = value; }
        }
        private int _tipo;

        public int Tipo
        {
            get { return _tipo; }
            set { _tipo = value; }
        }

        private string _codigo;

        public string Codigo
        {
            get { return _codigo; }
            set { _codigo = value; }
        }
        private string _desc;

        public string Desc
        {
            get { return _desc; }
            set { _desc = value; }
        }
        private string _marca;

        public string Marca
        {
            get { return _marca; }
            set { _marca = value; }
        }
        private string _comentarios;

        public string Comentarios
        {
            get { return _comentarios; }
            set { _comentarios = value; }
        }
        private double _costo;

        public double Costo
        {
            get { return _costo; }
            set { _costo = value; }
        }
        private double _precio;

        public double Precio
        {
            get { return _precio; }
            set { _precio = value; }
        }

        public bool Compra
        {
            get { return _compra; }
            set { _compra = value; }
        }        

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        
             


        public FunProductosCrear(bool compra)
        {
            InitializeComponent();
            _compra = compra;
        }
        
        #region eventos

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                textBox9.Text = Clases.CodigoDeBarras.ConvertEAN(txtCodigo.Text, false, "");
            }
        }

        private void txtCosto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (txtCosto.Text.Length == 0)
            {
                txtCosto.Text = "0";
            }
            else
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
        }

        private void txtUtilidad_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (txtUtilidad.Text.Length == 0)
            {
                txtUtilidad.Text = "0";
            }
            else
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
        }

        private void txtCosto_TextChanged(object sender, EventArgs e)
        {
            if (txtCosto.Text.Length == 0)
            {
                txtCosto.Text = "0";
            }
            else
            {
                txtPrecio.Text = CentroVentas.Clases.Funciones.Producto.getPrecioVenta(Convert.ToDouble(txtCosto.Text), Convert.ToDouble(txtUtilidad.Text), Convert.ToDouble(txtImpuesto.Text)).ToString();
                txtFormateado.Text = CentroVentas.Clases.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));
            }
        }

        private void txtUtilidad_TextChanged(object sender, EventArgs e)
        {
            if (txtUtilidad.Text.Length == 0)
            {
                txtUtilidad.Text = "0";
            }
            else
            {
                if (!chkModificarPrecioFinal.Checked)
                {
                    txtPrecio.Text = CentroVentas.Clases.Funciones.Producto.getPrecioVenta(Convert.ToDouble(txtCosto.Text), Convert.ToDouble(txtUtilidad.Text), Convert.ToDouble(txtImpuesto.Text)).ToString();
                    txtFormateado.Text = CentroVentas.Clases.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));
                }
            }
        }

        private void chkModificarPrecioFinal_CheckedChanged(object sender, EventArgs e)
        {
            txtPrecio.ReadOnly = !chkModificarPrecioFinal.Checked;
        }

        private void txtImpuesto_TextChanged(object sender, EventArgs e)
        {
            if (txtImpuesto.Text.Length == 0)
            {
                txtImpuesto.Text = "0";
            }
            else
            {
                txtPrecio.Text = CentroVentas.Clases.Funciones.Producto.getPrecioVenta(Convert.ToDouble(txtCosto.Text), Convert.ToDouble(txtUtilidad.Text), Convert.ToDouble(txtImpuesto.Text)).ToString();
                txtFormateado.Text = CentroVentas.Clases.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));
            }
        }

        private void txtPrecio_TextChanged(object sender, EventArgs e)
        {
            if (chkModificarPrecioFinal.Checked)
            {
                if (txtPrecio.Text.Length == 0)
                {
                    txtPrecio.Text = "0";
                }


                txtUtilidad.Text = CentroVentas.Clases.Funciones.Producto.getUtilidad(Convert.ToDouble(txtCosto.Text), Convert.ToDouble(txtPrecio.Text)).ToString();
                txtFormateado.Text = CentroVentas.Clases.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));                
            }
            else
            {
                if (txtPrecio.Text.Length == 0)
                {
                    txtPrecio.Text = "0";
                }
                txtFormateado.Text = CentroVentas.Clases.Currency.formatearMoneda(Convert.ToDouble(txtPrecio.Text));
            }

        }

        private void txtImpuesto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtPrecio_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtCantidad_ValueChanged(object sender, EventArgs e)
        {
            txtCMinima.Value = txtCantidad.Value / 4;
        }
        #endregion

        private void FunProductosCrear_Load(object sender, EventArgs e)
        {
            txtCodigo.Focus();
            Clases.Funciones.Producto.GetMarcasTextBox(txtMarca);
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrWhiteSpace(txtDescripcion.Text))
            {
                if (!String.IsNullOrWhiteSpace(txtMarca.Text))
                {
                    if (Convert.ToDouble(txtPrecio.Text) > Convert.ToDouble(txtCosto.Text))
                    {
                        if (_compra)
                        {
                            this.DialogResult = System.Windows.Forms.DialogResult.OK;
                            Codigo = txtCodigo.Text;
                            Desc = txtDescripcion.Text;
                            Costo = Convert.ToDouble(txtCosto.Text);
                            Utilidad = Convert.ToInt32(txtUtilidad.Text);
                            Iva = Convert.ToInt32(txtImpuesto.Text);
                            Precio = Convert.ToDouble(txtPrecio.Text);
                            if (rbtFisico.Checked) Tipo = 0;
                            if (rbtServicio.Checked) Tipo = 1;
                            Marca = txtMarca.Text;
                            Cantidad = Convert.ToInt32(txtCantidad.Value);
                            Minimo = Convert.ToInt32(txtCMinima.Value);
                            Comentarios = txtComentarios.Text;
                            try
                            {
                                IdPrecio = Clases.Funciones.Producto.crearProducto(Codigo, Desc, Tipo, Marca, Comentarios, Minimo, Costo, Utilidad, Iva, Precio, Cantidad);
                                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                                this.Dispose();
                            }
                            catch (Exception ex)
                            {
                                Utilidades.mensaje(TipoMensaje.ERROR, ex.Message, 33);
                            }
                        }
                    }
                    else
	                {
                        if (MessageBox.Show(this, "El valor final del producto, es menor al costo, ¿Desea continuar?", this.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                        {
                            if (_compra)
                            {
                                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                                Codigo = txtCodigo.Text;
                                Desc = txtDescripcion.Text;
                                Costo = Convert.ToDouble(txtCosto.Text);
                                Utilidad = Convert.ToInt32(txtUtilidad.Text);
                                Iva = Convert.ToInt32(txtImpuesto.Text);
                                Precio = Convert.ToDouble(txtPrecio.Text);
                                if (rbtFisico.Checked) Tipo = 0;
                                if (rbtServicio.Checked) Tipo = 1;
                                Marca = txtMarca.Text;
                                Cantidad = Convert.ToInt32(txtCantidad.Value);
                                Minimo = Convert.ToInt32(txtCMinima.Value);
                                Comentarios = txtComentarios.Text;
                                try
                                {
                                    IdPrecio = Clases.Funciones.Producto.crearProducto(Codigo, Desc, Tipo, Marca, Comentarios, Minimo, Costo, Utilidad, Iva, Precio, Cantidad);
                                    this.Dispose();
                                }
                                catch (Exception ex)
                                {
                                    Utilidades.mensaje(TipoMensaje.ERROR, ex.Message, 33);
                                }
                            }
                        }
	                }
                }
                else
                {
                    Utilidades.mensaje(TipoMensaje.ERROR, "Debe escribir una marca", 32);
                }
            }
            else
            {
                Utilidades.mensaje(TipoMensaje.ERROR, "Debe escribir una descripción",32);
            }            
        }

        private void txtCodigo_TextChanged(object sender, EventArgs e)
        {
            textBox9.Text = Clases.CodigoDeBarras.ConvertEAN(txtCodigo.Text, false, "");
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.Dispose();
        }

        





       
    }
}
